package com.itheima.controller;

import com.itheima.entity.Account;
import com.itheima.service.AccountService;
import com.itheima.service.impl.AccountServiceImpl;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import static org.junit.Assert.*;

public class AccountControllerTest1 {
    /**
     * 入门测试 观察 容器特性 底层map集合
     */
    @Test
    public void tourism() {
        //不要再自己new对象(有的还是要的!!!)
        //而是交给 spring容器来做

        //创建spring容器了
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        //对象给它 帮我们创建 帮我们存着
        Object controller = context.getBean("accountController");

        System.out.println(controller);
    }

    /**
     * 获取对象
     */
    @Test
    public void testGetBean() {
        //不要再自己new对象(有的还是要的!!!)
        //而是交给 spring容器来做

        //创建spring容器了
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        //对象给它 帮我们创建 帮我们存着
        //1.第一种方式  如果只是根据名字获取  得到对象  还需要自行强转 使用
        /* AccountController controller = (AccountController) context.getBean("accountController");
        //如果直接调用GetBean 传入id值 还需要强转使用
        controller.save(new Account());*/

        //2. 获取 直接根据类型来获取对象 减少 强转代码
        /*AccountController controller = context.getBean(AccountController.class);

        controller.save(new Account());*/

        //2.1 根据类型获取的问题

        /*AccountService accountService = context.getBean(AccountService.class);*/

        //3.获取对象 指明类型和名字
        /*AccountService accountService = context.getBean("accountService2", AccountService.class);*/

        //那我们常用哪个啊   用第二个  我们知道 有问题
        //但是我们通过编码规范方式 屏蔽这个问题
        // 一种类型的对象 只声明一个就行了


    }
}